package com.doubi;

import com.alibaba.fastjson.JSONObject;
import com.doubi.model.websocket.Notice;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.CopyOnWriteArraySet;

@ServerEndpoint("/websocket/{oid}")
@Component
@Slf4j
public class WebSocketServer {
    //concurrent包的线程安全Set，用来存放每个客户端对应的MyWebSocket对象。
    private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<>();

    public String oid;
    public Session session;

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    /**
     * MrDoubi
     * 2019年11月2日 14:40:18
     * 新的链接
     * @param session session 对象
     * @param oid 用户oid
     */
    @OnOpen
    public void onOpen(Session session, @PathParam("oid") String oid) {
        this.oid = oid;
        this.session = session;
        webSocketSet.add(this);
    }

    /**
     * MrDoubi
     * 2019年11月2日 14:40:56
     * 关闭了链接
     */
    @OnClose
    public void onClose() {
        webSocketSet.remove(this);  //从set中删除
    }

    /**
     * MrDoubi
     * 2019年11月2日 14:41:09
     * 接收消息
     * @param message 消息内容
     * @param session session
     */
    @OnMessage
    public void onMessage(String message, Session session) {

    }

    /**
     * MrDoubi
     * 2019年11月2日 14:41:33
     * 链接对象
     * @param session session
     * @param error 错误信息
     */
    @OnError
    public void onError(Session session, Throwable error) {
        log.error("发生错误");
        error.printStackTrace();
    }
}